#include <iostream>
class Test
{
public:
    void show()
    {
        std::cout << "helloworld" << std::endl;
    }
    void lambda()
    {
        //捕获this指针
        //相当于定义了一个函数
        auto f = [this]()
        {
            this->show();
        };
        //调用
        f();
    }
};

int main()
{
    //[]捕获列表：捕获上下文中的变量
    //():参数列表
    //{}:函数主体
    int a = 11;
    int b = 20;
    int c;
    int d;
    //&:引用捕获
    //[=]:以值的形式捕获所有变量
    //可以指定某个变量为引用捕获
    auto f = [=, &a]()/* ->int */ //显示指定返回值的写法，不写将会自动推导返回值类型
    {
        //[a]以值的形式捕获,a为常量表达式，不可修改
        //[&a]以应用的形式捕获，修改a即修改外面的a;
        a++;
        std::cout << a << std::endl;
        return 10;
    };
    
    std::cout << f() << std::endl;


    Test t;
    t.lambda();
    return 0;
}